package drds.server.sqlparser.parser;

/**
 * 
 * @author 曹正辉<330937205@qq.com>
 * 
 */
public enum Mark {
	// 切分标志pk_eq pk_between pk_in
	PARTITION_KEY_EQ("pk_eq", true), //
	//
	PARTITION_KEY_LESSTHAN("pk_lt", true), //
	PARTITION_KEY_LESSTHAN_OR_EQUAL("pk_lte", true), //
	PARTITION_KEY_GREATERTHAN("pk_gt", true), //
	PARTITION_KEY_GREATERTHAN_OR_EQUAL("pk_gte", true), //
	//
	PARTITION_KEY_BETWEEN("pk_between", true), //
	PARTITION_KEY_IN("pk_in", true), //
	//

	UPDATE("update", true), //
	SET("set", true), //
	ADD("+", true), //
	// 使用~代替-(update table set a=a~b <=> update table set a=a-b)。
	SUB("~", true),
	//
	INSERT("insert", true), //
	INTO("into", true), //
	VALUES("values", true), //
	//
	DELETE("delete", true), //
	//
	SELECT("select", true), //
	FOR("for", true), //
	// UPDATE("update", true), //
	DISTINCT("distinct", true), //
	COMMA(",", true), //
	DOT(".", true), //
	AS("as", true), //
	FROM("from", true), //
	LEFT("left", true), //
	RIGHT("right", true), //
	JOIN("join", true), //
	ON("on", true), //
	UNION("union", true), //
	ALL("all", true), //
	WHERE("where", true), //

	//
	GROUP_BY("group_by", true), //
	GROUP_BY_AND("filter", true), //
	MIN("min", true), //
	MAX("max", true), //
	COUNT("count", true), //
	SUM("sum", true), //
	AVG("avg", true),
	//
	ORDER_BY("order_by", true), //
	ASC("asc", true), //
	DESC("desc", true), //
	LIMIT("limit", true), //
	//
	BANG("!", true), //
	Equal("=", true), //
	NotEqual("!=", true), //

	LessThanOrEqual("<=", true), //
	GreaterThanOrEqual(">=", true), //
	GreaterThan(">", true), //
	LessThan("<", true), //
	//
	IS("is", true), //
	NOT("not", true), //
	NULL("null", true), //

	AND("and", true), //
	OR("or", true), //
	//
	BETWEEN("between", true), //
	IN("in", true), //
	LIKE("like", true), //

	//
	LEFT_PAREN("(", true), //
	RIGHT_PAREN(")", true), //
	//
	ALL_COLUMN("*", true), //
	//
	INT, // 整数
	DECIMAL, // 小数
	IDENTIFIER, //
	/**
	 * \'xyz\'
	 */
	STRING_START, // \'
	STRING_END, // \'
	STRING, //
	VARIABLE("?", true), //
	//
	EOF, //
	ERROR, //
	DRDS, //
	;//

	public final String name;

	Mark() {
		this(null, false);
	}

	Mark(String name, boolean isAddToKeyWordsMap) {
		this.name = name;
		if (isAddToKeyWordsMap) {
			MarkMap.MAP.put(name, this);
		}
	}
}
